opencv绘图函数(cv2.line(),

您所在的位置:网站首页 python opencv画直线延长线 opencv绘图函数(cv2.line(),

opencv绘图函数(cv2.line(),

2024-05-28 17:09| 来源: 网络整理| 查看: 265

主要有cv2.line()//画线, cv2.circle()//画圆, cv2.rectangle()//长方形,cv2.ellipse()//椭圆, cv2.putText()//文字绘制

主要参数

img:源图像color:需要传入的颜色thickness:线条的粗细,默认值是1linetype:线条的类型,8 连接,抗锯齿等。默认情况是 8 连接。cv2.LINE_AA 为抗锯齿,这样看起来会非常平滑。1、画线画线——设置起点和终点,颜色,线条宽度代码语言:javascript复制#创建一个图像,300×400大小,数据类型无符号8位 img=np.zeros((300,400,3),np.uint8) cv2.line(img,(10,10),(200,200),(0,255,0),3)#绿色,3个像素宽度

2、画矩形

矩形——设置左上顶点和右下顶点,颜色,线条宽度代码语言:javascript复制cv2.rectangle(img,(10,10),(30,40),(134,2,34),1)3、画圆圆——指定圆心和半径代码语言:javascript复制cv2.circle(img,(60,60),30,(0,0,213),-1)4、椭圆

画椭圆——需要输入中心点位置,长轴和短轴的长度,椭圆沿逆时针选择角度,椭圆沿顺时针方向起始角度和结束角度

代码语言:javascript复制cv2.ellipse(img,(256,256),(100,50),0,0,180,(20,213,79),-1) #线型-1表示填充5、多边形画多边形——需要指定每个顶点的坐标代码语言:javascript复制import numpy as np pts=np.array([[10,3],[48,19],[60,3],[98,19]],np.int32) #数据类型必须是int32 pts=pts.reshape((-1,1,2)) '''这里 reshape 的第一个参数为-1, 表明这一维的长度是根据后面的维度的计算出来的。 如果第三个参数是 False,我们得到的多边形是不闭合的(首尾不相连)。 ''' cv2.polylines(img,[pts],True,(0,0,255),1) # 图像,点集,是否闭合,颜色,线条粗细

6、添加文字

设置参数——绘制的文字,位置,字型,字体大小,文字颜色,线型代码语言:javascript复制font=cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img,’OpenCV’,(80,90), font, 2,(255,255,255),3)

7、用鼠标绘制图形

opencv鼠标处理事件cv2.setMouseCallback()函数鼠标事件如下:cv2.EVENT_MOUSEMOVE 0 鼠标移动cv2.EVENT_LBUTTONDOWN 1 左键单击cv2.EVENT_RBUTTONDOWN 2 右键单击cv2.EVENT_MBUTTONDOWN 3 中键单击cv2.EVENT_LBUTTONUP 4 左键释放cv2.EVENT_RBUTTONUP 5 右键释放cv2.EVENT_MBUTTONUP 6 中键释放cv2.EVENT_LBUTTONDBLCLK 7 左键双击cv2.EVENT_RBUTTONDBLCLK 8 右键双击cv2.EVENT_MBUTTONDBLCLK 9 中键双击鼠标事件标志:cv2.EVENT_FLAG_LBUTTON 1 鼠标左键按下状态cv2.EVENT_FLAG_RBUTTON 2 鼠标右键按下状态cv2.EVENT_FlAG_MBUTTON 4 鼠标中键按下状态cv2.EVENT_FLAG_CTRLKEY 8 指示CTRL键按下状态cv2.EVENT_FLAG_SHIFTKEY 16 指示SHIFT键按下状态cv2.EVENT_FLAG_ALTKEY 32 指示ALT键按下状态

示例——鼠标双击画圆

代码语言:javascript复制import cv2 import numpy as np def CircleCallback(event,x,y,flags,param): if event==cv2.EVENT_LBUTTONDBLCLK: cv2.circle(img,(x,y),50,(76,201,255),1) print('圆心坐标x=:{0},y=:{1}'.format(x,y)) img=cv2.imread('empire.jpg',1) print(img.dtype) cv2.namedWindow('mouse_callback') cv2.setMouseCallback('mouse_callback',CircleCallback) while(True): cv2.imshow('mouse_callback',img) #这里注意cv2.waitKey()里面等待时间不要写0,否则画面不刷新。切记!!! if cv2.waitKey(10)&0xFF==ord('q'): break cv2.destroyAllWindows()

效果如下:

拖动画矩形或者鼠标移动轨迹,检测鼠标是否按下,按下后确定初始点(ix,iy),鼠标按下状态绘制鼠标轨迹,松开后绘制矩形

代码语言:javascript复制import cv2 import numpy as np drawing = False # 鼠标未按下时不绘制 mode = True # true时绘制矩形,按'm'变成绘制曲线 ix, iy = -1, -1 # 定义鼠标回调函数 def MouseCallback(event, x, y, flags, param): global ix, iy, drawing, mode # 按下左键确定鼠标起始位置 if event == cv2.EVENT_LBUTTONDOWN: drawing = True ix, iy = x, y # 左键按下状态并且移动开始绘制 elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON: if drawing is True: if mode is False: pass # cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1) else: # 默认开启绘制鼠标轨迹,按m取消 cv2.circle(img, (x, y), 1, (255, 0, 0), -1) elif event == cv2.EVENT_LBUTTONUP: if drawing is True: if mode is True: cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 1) drawing = False img = cv2.imread('empire.jpg', 1) cv2.namedWindow('rectangle') cv2.setMouseCallback('rectangle', MouseCallback) while(True): cv2.imshow('rectangle', img) k = cv2.waitKey(20) & 0xFF if k == ord('m'): mode = not mode elif k == ord('q'): break


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3